#ifndef __HF_HAL_IIC_H__
#define __HF_HAL_IIC_H__

#include "hf_hal_common.h"

// I2C配置宏（根据硬件调整）
#define I2C_PORT                I2C1
#define I2C_SCL_PIN             GPIO_Pin_6  // PB6
#define I2C_SDA_PIN             GPIO_Pin_7  // PB7
#define I2C_GPIO_PORT           GPIOB
#define I2C_RCC_PERIPH          RCC_APB1Periph_I2C1
#define I2C_RCC_GPIO            RCC_AHB1Periph_GPIOB
#define I2C_SPEED               100000      // 100kHz标准模式
#define I2C_TIMEOUT             1000000     // 超时计数（可调）

// 错误码
#define I2C_OK                  0
#define I2C_ERROR               1
#define I2C_TIMEOUT_ERROR       2

/**
 * @brief  初始化I2C硬件
 * @retval None
 */
void hf_iic_init(void);

/**
 * @brief  向I2C从设备写入数据
 * @param  slave_addr: 从设备7位地址（<<1后传入）
 * @param  p_data: 发送数据缓冲区指针
 * @param  size: 发送数据长度
 * @retval I2C状态（I2C_OK, I2C_ERROR, I2C_TIMEOUT_ERROR）
 */
int8_t hf_iic_write(uint8_t slave_addr, uint8_t *p_data, uint16_t size);

/**
 * @brief  从I2C从设备读取数据
 * @param  slave_addr: 从设备7位地址（<<1后传入）
 * @param  p_data: 接收数据缓冲区指针
 * @param  size: 接收数据长度
 * @retval I2C状态
 */
int8_t hf_iic_read(uint8_t slave_addr, uint8_t *p_data, uint16_t size);

/**
 * @brief  向I2C从设备写入寄存器值（先写寄存器地址，再写数据）
 * @param  slave_addr: 从设备7位地址（<<1后传入）
 * @param  reg_addr: 寄存器地址
 * @param  p_data: 发送数据缓冲区指针
 * @param  size: 发送数据长度
 * @retval I2C状态
 */
int8_t hf_iic_write_reg(uint8_t slave_addr, uint8_t reg_addr, uint8_t *p_data, uint16_t size);

/**
 * @brief  从I2C从设备读取寄存器值（先写寄存器地址，再读数据）
 * @param  slave_addr: 从设备7位地址（<<1后传入）
 * @param  reg_addr: 寄存器地址
 * @param  p_data: 接收数据缓冲区指针
 * @param  size: 接收数据长度
 * @retval I2C状态
 */
int8_t hf_iic_read_reg(uint8_t slave_addr, uint8_t reg_addr, uint8_t *p_data, uint16_t size);

#endif /* __HF_HAL_IIC_H__ */